"""
多态
多态指的是同一种事物的多种形态。
即同一个方法可以作用于不同的对象上，并且表现出不同的行为。
抽象类和接口是实现多态的常用方式。
抽象类是不能实例化的类，通常包含一个或多个抽象方法。
抽象方法在抽象类中声明，但没有具体实现，必须在子类中实现。
接口是一种特殊的抽象类，只包含抽象方法，没有任何具体实现。
Python通过继承和方法重写来实现多态。
"""
class Animal:
    def speak(self):
        raise NotImplementedError("子类必须实现这个方法")
class Dog(Animal):
    def speak(self):
        print("Woof!")
class Cat(Animal):
    def speak(self):
        print("Meow!")
def animal_sound(animal:Animal):
    animal.speak()
dog = Dog()
cat = Cat()
animal_sound(dog)  # 输出: Woof!
animal_sound(cat)  # 输出: Meow!

class AC:
    def cool_wind(self):
        """ 制冷"""
        raise NotImplementedError("子类必须实现这个方法")
    def hot_wind(self):
        """ 制热"""
        raise NotImplementedError("子类必须实现这个方法")
    def swing_l_r(self):
        """ 左右摆风"""
        raise NotImplementedError("子类必须实现这个方法")
class MideaAC(AC):
    def cool_wind(self):
        print("美的空调制冷")
    def hot_wind(self):
        print("美的空调制热")
    def swing_l_r(self):
        print("美的空调左右摆风")
class GreeAC(AC):
    def cool_wind(self):
        print("格力空调制冷")
    def hot_wind(self):
        print("格力空调制热")
    def swing_l_r(self):
        print("格力空调左右摆风")
def use_ac(ac:AC):
    ac.cool_wind()
    ac.hot_wind()
    ac.swing_l_r()
midea = MideaAC()
gree = GreeAC()
use_ac(midea)
use_ac(gree)